package com.wenchen.medialib.base
/**
 * 媒体文件类型
 * */
enum class MediaType {
    /**
     * 未知
     * */
    UNKNOWN,
    /**
     * 视频
     * */
    VIDEO,
    /**
     * 音频
     * */
    AUDIO
}

/**
 * 编解码方式
 * */
enum class CodecMode {
    /**
     * 硬解
     * */
    HARDWARE,
    /**
     * 软解
     * */
    SOFTWARE,
    /**
     * 兼容模式
     * */
    COMPATIBLE
}

/**
 * 颜色格式
 * */
enum class ColorFormat {
    /**
     * 2 个字节表示 RGB 颜色格式，5 位红色分量，6 位绿色分量，5 位蓝色分量
     * */
    RGB_565,
    /**
     * 3 个字节表示 RGB，三原色各占一个字节
     * */
    RGB_888,
    /**
     * 4 个字节表示 RGBA，三原色各占一个字节，透明度占一个字节
     * */
    RGBA_8888,
    /**
     * 处理数码相机视频时可能用到
     *
     * 彩色数码相机需要 3 个单色的 sensor 获得 RGB 分量，但这样成本较高，为了降低成本，在单 sensor 上通过 RGB 三色
     * 的马赛克滤镜获得对应的颜色分量，这一方法最初由 bayer 提出，所以取名为 bayer。滤镜大概可以有以下 4 种图案，
     * 即 GB/RG, GR/BG, BG/GR, RG/GB, 每一个采样点有 8/10 bit ADC 进行量化
     */
    BAYER,
    /**
     * YUV 和 RGB 都可以用来描述颜色。YUV 主要用于电视系统以及模拟视频领域，它将亮度信息 Y与色彩信息 UV 分离，
     * 没有 UV 信息一样可以显示完整的图像，只不过是黑白的，这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。
     * 并且，YUV 不像 RGB 那样要求三个独立的视频信号同时传输，所以用 YUV 方式传送占用极少的频宽，压缩效率更高。
     *
     * Y 表示明亮度，也就是灰度值；而 U 和 V 表示的则是色度，作用是描述影像色彩及饱和度，用于指定像素的颜色。
     *
     * YUV 420 采样，每四个 Y 共用一组 UV 分量。
     *
     * 如相邻的两行数据：
     * Y00U00V00 Y01U01V01 Y02U02V02 Y03U03V03
     * Y10U10V10 Y11U11V11 Y12U12V12 Y13U13V13
     *
     * 存储时：
     * Y00U00 Y01 Y02U02  Y03    // Y 数据保留， 2 个像素数据只保留 1 个 U 数据。这一行不保留 V 数据(YUV: 420)
     * Y10V10 Y11 Y12V12  Y13    // 2 个像素数据只保留 1 个 V 数据， 这行不保留 U 数据(YUV: 402)
     *
     * 还原时：
     * Y00U00V10  Y01U00V10  Y02U02V12  Y03U02V12 // 相同位置的上下两行 4 个像素结合还原
     * Y10U00V10  Y11U00V10  Y12U02V12  Y13U02V12
     *
     * 注意 1：YCrCb 是 YUV 格式的一种。Cr 表示红色色度分量，Cb 表示蓝色色度，而 Y 则是叠加了绿色色度分量和亮度信息
     * 注意 2：YUV 数据还分成 打包的 和 平面的：
     *     打包的 意思是： YUV 数据是顺序存放 Y，接着 U，再接着 V 数据存放。
     *     平面的 意思是： YUV 数据分成三个地方存放，一个地方只存 Y 数据，一个只存 U 数据，一个只存 V 数据
     * */
    YUV420,
    /**
     * YUV 422 采样，每两个 Y 共用一组 UV 分量。(相邻的 4 个像素里有 4 个 Y， 2 个U， 2 个V，YUV422)
     *
     * 如同一行的相邻 4 个像素数据: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3
     *
     * 存储时：Y0 U0  Y1 V1 Y2 U2 Y3 V3  // 每两个相邻的像素， 一个丢弃 V 数据，一个丢弃 U 数据
     *
     * 还原时：Y0U0V1 Y1U0V1 Y2U2V3 Y3U2V3  // 相邻两个像素共用 1 个 UV
     *
     * 注意 1：YCrCb 是 YUV 格式的一种。Cr 表示红色色度分量，Cb 表示蓝色色度，而 Y 则是叠加了绿色色度分量和亮度信息
     * 注意 2：YUV 数据还分成 打包的 和 平面的：
     *     打包的 意思是： YUV 数据是顺序存放 Y，接着 U，再接着 V 数据存放。
     *     平面的 意思是： YUV 数据分成三个地方存放，一个地方只存 Y 数据，一个只存 U 数据，一个只存 V 数据
     * */
    YUV422,
    /**
     * YUV 444 采样 每一个 Y 对应一组 UV 分量。(4 个像素里的数据有 4 个 Y，4 个 U,4 个 V)
     *
     * 如同一行的相邻 4 个像素数据：Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3
     *
     * 存储时：Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3  // 即每个像素 YUV 的数据都会存放起来
     *
     * 注意 1：YCrCb 是 YUV 格式的一种。Cr 表示红色色度分量，Cb 表示蓝色色度，而 Y 则是叠加了绿色色度分量和亮度信息
     * 注意 2：YUV 数据还分成 打包的 和 平面的：
     *     打包的 意思是： YUV 数据是顺序存放 Y，接着 U，再接着 V 数据存放。
     *     平面的 意思是： YUV 数据分成三个地方存放，一个地方只存 Y 数据，一个只存 U 数据，一个只存 V 数据
     * */
    YUV444
}